import static java.lang.Math.sqrt;
/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: DELL
 * Date: 2022-08-12
 * Time: 16:41
 */

//构造方法得作用只是给对象得成员变量初始化了，并不负责给对象开辟空间

class Date {
    public static int year = 2022;
    public static int month = 10;
    public static int day = 5;

    //Date 无参构造器
    public Date() {
        //super();
        //System.out.println("无参构造器");
        this(year,month,day); //this() 调用方法构造方法--必须在第一行否则会报错！！！

        System.out.println("无参构造器");

    }

    //三个参数得构造器
    public Date(int year, int month, int day) {
        //super();
        this(10,20,30,40); // -- this();调用构造方法不能形成闭环
        this.year = year;
        this.month = month;
        this.day = day;
        System.out.println("三个参数得构造器");
    }
    public Date(int a,int b,int c,int d){
        System.out.println("四个参数得构造器");
    }
}

class Person{
    private static int age;  //被static 修饰得称为静态成员方法，是类得方法不是某个对象特有得
    private static String name;
    public static String sex;
    public int m=10;

    public void fun(){
        System.out.println("这是一个名为fun得静态方法");
    }

    public static String getName() {
        return name;
    }

    public static int getAge() {
        return age;
    }

    public static String getSex() {
        System.out.println("这是一个静态方法");
        //fun(); //静态方法中不能调用仍和非静态得方法
        return sex;
    }

}

class Dog{
    //实例变量成员
    private String name;
    private int age;

    {
        //实例代码块只有在创建对象时才会执行
        System.out.println("这是一个实例代码块==非静态代码块==构造代码块");
        int a;
    }

    static {
        //静态代码块无论多少个对象 只会执行一次
        //静态成员变量是类的属性，因此是在JVM加载类时开辟空间并初始化的
        System.out.println("这是一个静态代码块");
        int b = 5;
    }
    private Dog(){
        System.out.println("这是一个实例代码块也叫构造代码块");
    }
}

public class Test_0812 {

    public static void main1(String[] args) {
/*      Date date1 = new Date();
        System.out.println(date1);
        System.out.println(date1); // 构造方法也是特殊得成员变量，整个对象得周期内只调用一次
        Date date4 = new Date();
        System.out.println(date4);
        Date date2 = new Date(2022, 8, 12);
        System.out.println(date2);
        Date date3 = new Date(2022, 6, 12);
        System.out.println(date3);*/

        //System.out.println(date2); //在创建对象时由编译器自动调用，并且在对象的生命周期内只调用一次
        //此处并没有再去打印

        Person person = new Person();
        System.out.println(person.m); //非静态且权限可访问得成员变量可以通过对象点引用

        System.out.println(Person.sex);
        System.out.println(Person.class);
        //System.out.println(Person.);

        //静态成员变量通过静态方法访问 -- 类名点引用静态方法名
        System.out.println(Person.getAge());
        System.out.println(Person.getName());
        System.out.println(person.getAge());  //也可以通过对象引用 但不建议

    }

    public static void main(String[] args) {


    }

    }


